package cn.jiahua.controller;
/*
 * 每个方法是一个接口
 * */
import cn.jiahua.dto.ErrorCode;
import cn.jiahua.dto.ResponseDtoUtil;
import cn.jiahua.pojo.User;
import cn.jiahua.service.UserService;
import com.alibaba.fastjson.JSON;
import com.sun.org.apache.xpath.internal.operations.Mod;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.validation.Valid;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    UserService userService;

   /* @RequestMapping("/login.html")
    public String login_page(){
        return "login";
    }*/

    @RequestMapping("/dologin")
    @ResponseBody
    public Object dologin_page(@RequestParam String userCode,
                               @RequestParam String password,  HttpSession session){

        Map map= new HashMap();
        User login = userService.login(userCode, password);
        if(login==null){
            map.put("msg","用戶名或者密碼有誤");
            map.put("success",false);  //可以使用
        }else{
            map.put("success",true);  //可以使用
            map.put("msg","登录成功");
            map.put("datas",userCode);
        }

        return map;
    }

    @RequestMapping(value = "/list",method = RequestMethod.GET)
    @ResponseBody
    public Object userlistpage(@RequestParam(required = false) String userName,
                               @RequestParam(required = false) Integer userRole,
                               @RequestParam(required = false) String pageNo){
        int page_No=1;
        if(pageNo!=null){
            page_No=Integer.parseInt(pageNo);
        }
        if(userRole!=null&&userRole==0){
            userRole=null;
        }
        Map map= new HashMap();
        List<User> userListByPage = userService.getUserListByPage(page_No, 5, userName, userRole);

        //按照查詢总记录数
        int totalcount = userService.totalcount(userName, userRole);
        int totalPageCount=totalcount%5==0?(totalcount/5):(totalcount/5+1);
        map.put("success",true);
        map.put("totalcount",totalcount);
        map.put("data",userListByPage);
        map.put("userName",userName);
        map.put("pageNo",page_No);
        map.put("userRole",userRole);
        map.put("totalPage",totalPageCount);
        return map;
    }

//
//    @RequestMapping("/adduser2")
//    public String addUser(){
//            return "useradd";
//    }



    @RequestMapping(value = "/doadduser2",method = RequestMethod.POST)
    @ResponseBody
    public Object doaddUser(User user, @RequestParam(value = "attachs",required = false) MultipartFile[] attachs,  HttpSession session,
                            HttpServletRequest request){
        user.setCreateBy(1);
        //对文件上传字段进行操作
        //1.判断文件是否为空
        Map map= new HashMap();
        for (int i = 0; i < attachs.length; i++) {
            MultipartFile attach=attachs[i];
            String error="";
            if(i==0){
                //1.上传对象
                error="iderror";
            }else if(i==1){
                //2.上传对象
                error="workeror";
            }
            if(!attach.isEmpty()){
                //说明有文件上传
                //2.获取文件的相关信息，文件的大小
                long size = attach.getSize();
                if(size>500000){  //500kb
                    //文件过大
                    map.put("msg","文件不能超过500kb");
                    map.put("success",false);  //可以使用

                    return map;
                }
                //3.获取文件的相关信息，文件的后缀名  jpg jpeg png pneg
                String originalFilename = attach.getOriginalFilename();  //上传的文件名称
                String suffix=originalFilename.substring(originalFilename.indexOf("."));  //取后缀 .png
                if(    suffix.equals(".png")
                        || suffix.equals(".pneg")
                        ||suffix.equals(".jpg")
                        ||suffix.equals(".jpeg")){
                    //4.生成新的文件名 必须是全局唯一
                    double random = Math.random();;
                    int num=(int)(1000+random*9000);;
                    String fileName=null;
                    if(i==0){
                        fileName=System.currentTimeMillis()+""+num+"_personal"+suffix;
                    }else if (i==1){
                        fileName=System.currentTimeMillis()+""+num+"_work"+suffix;
                    }

                    //5.创建上传文件路径
                    //獲取tomcat部署項目，upload文件的路徑，将来文件就存放再这个路径下
                    String realPath=null;
                    if(i==0){
                        realPath= request.getSession().getServletContext().getRealPath("statics/upload/person/");
                    }else{
                        realPath = request.getSession().getServletContext().getRealPath("statics/upload/work/");
                    }


                    File file =new File(realPath,fileName);
                    if(!file.exists()){
                        file.mkdir();
                    }
                    //6.实现文件的上传
                    try {
                        //将attach数据  转移到  tomcat文件目录，io刘操作
                        attach.transferTo(file);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    //7.保存上传文件的文件名信息到User对象中
                    if(i==0){
                        user.setIdPicPath(fileName);
                    }else{
                        user.setWorkPicPath(fileName);
                    }
                }else{
                    map.put("msg","文件上传的类型有误，必须是png或jpg...");
                    map.put("success",false);  //可以使用

                    return map;
                }
            }
        }

        //8.将User 对象信息保存到数据库
        int i = userService.addUser(user);
        if(i>0){
            map.put("msg","添加用户成功");
            map.put("success",true);  //可以使用

            return map;
        }else{
            map.put("msg","添加用户失败");
            map.put("success",false);  //可以使用

            return map;
        }

    }


//    @RequestMapping(value = "/adduser",method = RequestMethod.GET)
//    public String adduser(@ModelAttribute User user){
//
//        return "useradd2";
//    }

//    @RequestMapping(value = "/adduser",method = RequestMethod.POST)
//    public String adduser2(@Valid User user, BindingResult bindingResult){
//        if(bindingResult.hasErrors()){
//            return "useradd2";
//        }
//        int i = userService.addUser(user);
//        if(i>0){
//            return "redirect:list";
//        }
//        return "useradd2";
//    }



    @RequestMapping(value = "/view/{id}",method = RequestMethod.GET)
    @ResponseBody
    public Object view(@PathVariable String id){
        HashMap<String, Object> map = new HashMap<>();
        User user = userService.viewUserById(Integer.parseInt(id));

        //返回对象数据返回到前端
        map.put("success",true);  //不能用，数据库存在不能用
        map.put("msg",null);
        map.put("data",user);

        return map;
    }


    @RequestMapping(value = "/isexistcode",method = RequestMethod.GET)
    @ResponseBody
    public Object isUserCodeExist(@RequestParam(required = true) String userCode){
        User userCodeExist = userService.isUserCodeExist(userCode);

        HashMap<String, Object> map = new HashMap<>();
        if(userCodeExist!=null){
            //数据库存在
            //返回对象数据返回到前端
//            map.put("success",false);  //不能用，数据库存在不能用
//            map.put("msg","系统存在该用户名，不能重复使用");
//            User user =userService.viewUserById(1);
//            map.put("data",user);
            return ResponseDtoUtil.fail(ErrorCode.USER_EXIST_ERROR);
        }else{
//            map.put("success",true);  //可以使用
//            map.put("msg","系统不存在该用户名，可以使用");
//            map.put("data",null);
            return ResponseDtoUtil.success("系统不存在该用户名，可以使用");
        }
        // map--》json
        //return map;
    }

    @RequestMapping(value = "/del",method = RequestMethod.GET)
    @ResponseBody
    public Object delUser(@RequestParam String id){
        int userId;
        if(!StringUtils.isEmpty(id) && (userId=Integer.parseInt(id))>0){
            int result = userService.delUserById(userId);
            if(result >0 ){
                return ResponseDtoUtil.success("删除用户成功");
            }
        }else{
            return ResponseDtoUtil.fail(ErrorCode.SYS_ARGS_ERROR);
        }
        //对象封装数据  传入枚举对象，返回 ResponseDto对象  前端转换成json对象
     //   return ResponseDtoUtil.fail(ErrorCode.USER_DEL_Error.getMsg(),ErrorCode.USER_DEL_Error.getCode());
        return ResponseDtoUtil.fail(ErrorCode.USER_DEL_Error);

    }



}
